const util = require("../../utils/util");
const app = getApp()
Page({
  //页面的初始数据
  data: {
    plcaceHolder:'评论'
  },
  //生命周期函数--监听页面加载
  onLoad: function (options) {
    //设置页面数据
    this.setData({
      openid : app.globalData.openid
    })
    console.log(options.id)
    this.data.id = options.id
    this.getDetail()
  },
  //获取具体的信息内容
  /*
该函数用于获取并渲染动态详情页面。
函数首先调用云数据库 API ，通过 `this.data.id` 获取指定动态记录的详细信息。然后，函数会对数据进行处理：
1. 使用 `util.formatTime()` 函数将动态发布时间格式化为标准格式。
2. 遍历点赞列表，判断当前用户是否已经点赞，如果已经点赞，则将 `isPrized` 设为 `true`。
3. 遍历评论列表，同样使用 `util.formatTime()` 函数将评论时间格式化为标准格式。
4. 最后，调用 `that.setData()` 函数渲染动态详情页数据。 */
  getDetail(){
    // 调用云数据库 API 获取动态详情
    var that = this;
    wx.cloud.database().collection('school_loves').doc(this.data.id).get({
      success(res){
        console.log(res)
        //将时间格式化为标准格式
        var action = res.data
        action.time = util.formatTime(new Date(action.time))
        //判断是否已经点赞，若已经点赞，则将isPrized设为true
        for(var l in action.prizeList){
          if(action.prizeList[l].openid = app.globalData.openid){
            action.isPrized = true
          }
        }
        //将评论数据里的时间都格式化
        for(var l in action.commentList){
          action.commentList[l].time = util.formatTime(new Date(action.commentList[l].time))
        }
        //渲染详情页数据
        that.setData({
          action: res.data
        })
      }
    })
  },
  //删除动态信息
  /*
该函数为小程序中的一个事件处理函数。在点击删除按钮后，会调用该函数来进行删除操作。
函数首先使用 `app.globalData.userInfo` 来判断用户是否已经登录。如果未登录，则提示用户需要先进行登录，并退出该函数。否则，会调用云数据库 API 的 `remove()` 方法来删除指定的动态记录。
在删除成功后，调用 `wx.navigateBack()` 函数返回上一页并弹出“删除成功”的提示框。 */
  delete(){
    if(!app.globalData.userInfo){
      wx.showToast({
        icon:'none',
        title: '请登录',
      })
      return
    }
    console.log(this.data.id)
    var that = this;
    wx.cloud.database().collection('school_loves').doc(this.data.id).remove({
      success(res){
        console.log(res)
        wx.navigateBack({
          success(res){
            wx.showToast({
              title: '删除成功！',
            })
          }
        })
      }
    })
  },
  //点赞功能
  /*
该函数为小程序中的一个事件处理函数。在点击动态上的“点赞”后，会调用该函数来进行点赞操作。
函数中使用了 `app.globalData.userInfo` 和 `app.globalData.openid` 来判断用户是否已经登录，并获取用户信息。如果未登录，则提示用户需要先进行登录。否则向数据库查询动态信息，并查看用户是否已经对该动态进行点赞操作。
如果用户已经点赞过，则取消点赞操作，即从点赞列表中删除用户的点赞记录。反之，则添加点赞操作，即向点赞列表中添加用户的点赞记录。
最后，通过更新数据库中的点赞列表数据，并调用 `that.getDetail()` 函数来更新动态详情页的点赞数和列表。 */
  pirzeAction(event){
    var that = this;
    if(app.globalData.userInfo == null){
      wx.showToast({
        icon:'none',
        title: '请登录',
      })
    }else {
      console.log(that.data.id)
      //向数据库查询动态信息
      wx.cloud.database().collection('school_loves').doc(that.data.id).get({
        success(res){
          console.log(res)
          var action = res.data
          //判断用户是否已经点赞过该动态，若已经点赞，则取消点赞，反之亦然
          var tag = false
          var index 
          for(var l in action.prizeList){
            if(action.prizeList[l].openid == app.globalData.openid){
              tag = true
              index = l
              break
            }
          }
          if(tag){
            //之前点赞过 删除点赞记录
            action.prizeList.splice(index,1)
            console.log(action)
            //更新点赞数据
            wx.cloud.database().collection('school_loves').doc(that.data.id).update({
              data: {
                prizeList: action.prizeList
              },
              success(res){
                console.log(res)
                that.getDetail()
              }
            })
          }else{
            //之前未点赞  添加点赞记录
            var user = {}
            user.nickName = app.globalData.userInfo.nickName
            user.faceImg = app.globalData.userInfo.avatarUrl
            user.openid = app.globalData.openid
            action.prizeList.push(user)
            console.log(action.prizeList)
            //更新点赞数据
            wx.cloud.database().collection('school_loves').doc(that.data.id).update({
              data: {
                prizeList: action.prizeList
              },
              success(res){
                console.log(res)
                wx.showToast({
                  title: '点赞成功！',
                })
                that.getDetail()
              }
            })
          }
        }
      })
    } 
  },
  //获取输入框的值（评论）
  //这段代码是一个小程序事件处理函数，用于当用户在输入框中输入文字时触发。它会将输入内容存储在该组件的 data 变量 inputValue 中。
  getInputValue(event){
    console.log(event.detail.value)// 输出用户输入的文本内容
    this.data.inputValue = event.detail.value // 存储文本内容
  },
  //发布评论内容
  //这段代码是一个小程序事件处理函数，用于用户发布评论时触发。它会将新的评论添加到对应数据记录的评论列表中，并更新页面。
  /*
1. 该函数会在用户发布新评论时被调用。
2. 首先函数检查用户是否已经登录，如果没有登录则弹出提示框让用户登录。
3. 函数获取当前数据记录的 id，并且使用 `console.log()` 输出，方便我们进行调试。
4. 然后函数通过 `wx.cloud.database().collection('school_loves').doc(that.data.id).get()` 方法获取对应数据记录。
5. 获取数据记录后，函数创建一个包含评论信息的新对象，并将其添加到评论列表中。
6. 添加评论信息时，函数使用 `app.globalData` 中存储的用户信息，同时将评论时间设置为当前时间戳。
7. 接着，函数使用 `wx.cloud.database().collection('school_loves').doc(that.data.id).update()` 方法更新对应数据记录中的评论列表。
8. 更新成功后，函数会弹出提示框告知用户评论成功，然后调用 `that.getDetail()` 方法，重新获取数据并渲染页面。
9. 最后，函数使用 `that.setData()` 方法清空输入框内的内容。
  */
  publishComment(){
    var that = this;
    if(app.globalData.userInfo == null){// 判断用户是否登录
      wx.showToast({
        icon:'none',
        title: '请登录',
      })
    }else {
      console.log(that.data.id)// 输出当前数据记录的id
      var that = this;
      wx.cloud.database().collection('school_loves').doc(that.data.id).get({
        success(res){
          console.log(res)
          var action = res.data
          //添加评论信息
          var comment = {}
          comment.nickName = app.globalData.userInfo.nickName // 添加评论者昵称
          comment.faceImg = app.globalData.userInfo.avatarUrl// 添加评论者头像url
          comment.openid = app.globalData.openid
          comment.text = that.data.inputValue// 添加评论文本内容
          comment.time = Date.now()// 添加评论时间
          comment.toOpenid = that.data.toOpenid// 被回复人openid（如果有）
          comment.toNickname = that.data.toNickname// 被回复人昵称（如果有）
          action.commentList.push(comment)// 向评论列表中添加评论
          //更新评论数据
          // 更新对应数据记录
          wx.cloud.database().collection('school_loves').doc(that.data.id).update({
            data: {
              commentList: action.commentList
            },
            success(res){
              console.log(res)
              wx.showToast({
                title: '评论成功！',
              })
              that.getDetail()// 更新页面

              //清空输入框的内容
              that.setData({
                inputValue :'',
                plcaceHolder:'评论'
              })
            }
          })
        }
      })
    }
  },
  //删除评论信息
  //这段代码是一个小程序事件处理函数，用于用户删除评论时触发。它将从本地数据库中删除指定评论，并更新页面。

  /* 
1. 该函数会在用户点击删除评论按钮时被调用。
2. 首先函数检查用户是否已经登录，如果没有登录，则弹出提示框让用户登录。
3. 接着函数获取当前被点击元素的索引，并使用 `console.log()` 输出，方便我们进行调试。
4. 函数接着弹出提示框询问用户是否确认删除评论，如果用户确认，则会进行下一步操作。
5. 在删除评论前，函数首先获取对应的数据记录，通过 `wx.cloud.database().collection('school_loves').doc(that.data.id).get()` 方法实现。
6. 获取数据记录后，函数把对应的评论从评论列表中删除，使用数组的 `splice()` 方法实现。
7. 接着，函数更新对应数据记录中的评论列表，使用 `wx.cloud.database().collection('school_loves').doc(that.data.id).update()` 方法实现。
8. 更新成功后，函数会弹出提示框告知用户删除成功，然后调用 `that.getDetail()` 方法，重新获取数据并渲染页面。*/
  deleteComment(event){
    if(!app.globalData.userInfo){//判断用户是否登录
      wx.showToast({
        icon:'none',
        title: '请登录',
      })
      return
    }
    var that = this;
    console.log(event.currentTarget.dataset.index)// 输出被点击元素的索引 
    //弹出是否删除该评论的确认框，若确认，则从本地数据库中删除相关数据，并刷新界面
    wx.showModal({
      title:'提示',
      content:'确定要删除此评论吗？',
      success(res){
        if(res.confirm){ // 用户确认删除评论
          var index = event.currentTarget.dataset.index// 获取被点击元素的索引
          wx.cloud.database().collection('school_loves').doc(that.data.id).get({// 获取对应的数据记录
            success(res){
              console.log(res)
              var action = res.data
              action.commentList.splice(index,1) // 在评论列表中删除指定元素
              wx.cloud.database().collection('school_loves').doc(that.data.id).update({// 更改对应数据记录中的评论列表
                data: {
                  commentList: action.commentList
                },
                success(res){
                  console.log(res)
                  wx.showToast({
                    title: '删除成功',
                  })
                  that.getDetail()// 更新页面
                }
              })
            }
          })
        }else if(res.cancel){// 用户取消删除评论
        }
      }
    })
  },
  //这段代码是一个小程序中的一个事件处理函数。它用于处理用户在评论框中点击回复按钮时触发的事件。
  /*
1. 该函数会在用户点击分享按钮时被调用，接受一个事件对象 `event` 作为参数。
2. 使用 `console.log()` 输出事件对象，方便我们进行调试和查看事件信息。
3. 函数通过 `return` 关键字返回了一个包含分享信息的对象，其中包括分享标题、分享图片和跳转路径等信息。
4. 分享标题使用了当前页面数据中 `action` 对象里的 `text` 字段，即活动的文本内容。
5. 分享图片使用了当前页面数据中 `action` 对象里的 `images` 字段，数组中的第一个元素代表活动的图片。
6. 跳转路径设置为 `pages/detail/detail?id=`，并附上当前页面的 `id` 参数，用于标识分享的是哪个活动详情。 */
  huifuComment(event){
    console.log(event.currentTarget.dataset.index)// 输出被点击的元素的索引 
    var index = event.currentTarget.dataset.index// 获取被点击的元素的索引
    this.setData({
      plcaceHolder : '回复' + this.data.action.commentList[index].nickName, // 设置评论框占位符为“回复某人”
      toOpenid: this.data.action.commentList[index].openid,// 记录被回复者的openid
      toNickname: this.data.action.commentList[index].nickName, // 记录被回复者的昵称
    })
  },
  //小程序中的一个事件处理函数，用于用户点击分享按钮时触发。它会把当前页面的一些信息分享给其他用户。

  /*
1. 该函数会在用户点击分享按钮时被调用，接受一个事件对象 `event` 作为参数。
2. 使用 `console.log()` 输出事件对象，方便我们进行调试和查看事件信息。
3. 函数通过 `return` 关键字返回了一个包含分享信息的对象，其中包括分享标题、分享图片和跳转路径等信息。
4. 分享标题使用了当前页面数据中 `action` 对象里的 `text` 字段，即活动的文本内容。
5. 分享图片使用了当前页面数据中 `action` 对象里的 `images` 字段，数组中的第一个元素代表活动的图片。
6. 跳转路径设置为 `pages/detail/detail?id=`，并附上当前页面的 `id` 参数，用于标识分享的是哪个活动详情。 */
  onShareAppMessage(event){
    console.log(event)// 输出事件对象
    return {
      title: this.data.action.text,// 分享的标题为活动文本内容
      imageUrl: this.data.action.images[0],// 分享的图片为活动图片的第一张
      path:'pages/detail/detail?id=' + this.data.id// 分享后跳转的路径为详情页
    }
  },


  //小程序事件处理函数，用于用户点击分享到朋友圈时触发，它将当前页面的信息分享到朋友圈。
  //这段代码是一个小程序事件处理函数，用于用户点击分享到朋友圈时触发，它将当前页面的信息分享到朋友圈。
/*
1. 该函数会在用户点击分享到朋友圈时被调用。
2. 函数通过 `return` 关键字返回了一个包含分享信息的对象，其中包括分享标题、分享图片和跳转路径等信息。
3. 分享标题使用了当前页面数据中 `action` 对象里的 `text` 字段，即活动的文本内容。
4. 分享图片使用了当前页面数据中 `action` 对象里的 `images` 字段，数组中的第一个元素代表活动的图片。
5. 跳转路径设置为 `pages/detail/detail?id=`，并附上当前页面的 `id` 参数，用于标识分享的是哪个活动详情。
*/
  onShareTimeline(){
    return {
      title:  this.data.action.text,
      imageUrl: this.data.action.images[0],
      query:'pages/detail/detail?id' + this.data.id
    }
  }
})